In general, each conventional computer typically supports a particular type of assembly language, which is associated with the specific architecture of a processor or processing device within the computer. An assembly language is a low level programming language that provides a symbolic representation of machine-executable instructions or object code. A utility program commonly referred to as an assembler can translate instructions written in an assembly language into object code executable by the processor. Although many assembly languages are not as easy to program as some high-level programming languages (such as C, C++, etc.), there are some advantages in programming with assembly languages over high-level programming languages. For instance, programs written in assembly languages are generally smaller in size, with lower overhead, and can be executed in greater speed.
In some common Unix-based systems, a library function, alloca( ), is provided to allocate memory. However, alloca( ) in general can allocate memory on a stack for a variable only once. The function returns a pointer to the beginning of the allocated space. If the allocation causes stack overflow, program behavior could be undefined. Note that alloca( ) is based on a calculated fixed size. In other words, the size of memory on the stack has to be predetermined with alloca( ). As a result, conventional memory allocation using alloca( ) lacks flexibility and can be seriously inefficient.